<?php
/**
 * @filename functions.php 
 * @encoding UTF-8 
 * @author KangShuAn
 * @datetime 2014-11-3 14:21:52
 * @version 1.0
 * @Description 公共函数
 */
/**
 * @param $str
 * @param $start
 * @param $len
 * @return string截取中文
 */
function msubstr($string, $sublen, $start = 0, $code = 'UTF-8'){
    if($code == 'UTF-8'){
        $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
        preg_match_all($pa, $string, $t_string);

        if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
        return join('', array_slice($t_string[0], $start, $sublen));
    }else{
        $start = $start*2;
        $sublen = $sublen*2;
        $strlen = strlen($string);
        $tmpstr = '';
        for($i=0; $i< $strlen; $i++){
            if($i>=$start && $i< ($start+$sublen)){
                if(ord(substr($string, $i, 1))>129){
                    $tmpstr.= substr($string, $i, 2);
                }else{
                    $tmpstr.= substr($string, $i, 1);
                }
            }
            if(ord(substr($string, $i, 1))>129) $i++;
        }
        if(strlen($tmpstr)< $strlen ) $tmpstr.= "...";
        return $tmpstr;
    }
}
/**
 * 获取客户端IP地址
 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
 * @return mixed
 */
function get_client_ip($type = 0) {
	$type       =  $type ? 1 : 0;
    static $ip  =   NULL;
    if ($ip !== NULL) return $ip[$type];
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $pos    =   array_search('unknown',$arr);
        if(false !== $pos) unset($arr[$pos]);
        $ip     =   trim($arr[0]);
    }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ip     =   $_SERVER['HTTP_CLIENT_IP'];
    }elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ip     =   $_SERVER['REMOTE_ADDR'];
    }
    // IP地址合法验证
    $long = sprintf("%u",ip2long($ip));
    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
    return $ip[$type];
}
/**
 * 提交POST请求，curl方法
 * @param string  $url       请求url地址
 * @param mixed   $data      POST数据,数组或类似id=1&k1=v1
 * @param array   $header    头信息
 * @param int     $timeout   超时时间
 * @param int     $port      端口号
 * @return string            请求结果,
 *                            如果出错,返回结果为array('error'=>'','result'=>''),
 *                            未出错，返回结果为array('result'=>''),
 */
function curl_post($url, $data = array(), $header = array(), $timeout = 5){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
    !empty ($header) && curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $result = array();
    $result['result'] = curl_exec($ch);
    if (0 != curl_errno($ch)) {
        $result['error']  = "Error:\n" . curl_error($ch);

    }
    curl_close($ch);
    return $result;
}

/**
 * 提交GET请求，curl方法
 * @param $url 请求url地址
 * @param array $header 头信息
 * @param int $timeout 超时时间
 * @return array  请求结果
 *                如果出错,返回结果为array('error'=>'','result'=>''),
 *                未出错，返回结果为array('result'=>''),
 */
function curl_get($url, $header = array(), $timeout = 5){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
    !empty ($header) && curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    $result = array();
    $result['result'] = curl_exec($ch);
    if (0 != curl_errno($ch)) {
        $result['error']  = "Error:\n" . curl_error($ch);

    }
    curl_close($ch);
    return $result;
}

/**
 * 操作失败
 * ！！如果页面请求的参数里含有 cross_cb，则认为是需要做跨域ajax的支持，跳转到 cross_cb 参数里指定的url
 * @param string $msg 失败描述
 */
function ajax_fail_exit($msg) {
	$return = array(
			'ok'	=> false,
			'msg'	=> $msg,
	);

	# 支持跨域的AJAX GET
	$jsonp_cb = isset($_GET['jsonp_cb']) ? $_GET['jsonp_cb'] : '';
	if ($jsonp_cb) {
		$jsonp_cb = htmlspecialchars($jsonp_cb);
		echo_exit("{$jsonp_cb}(".json_encode($return).")");
	}

	echo_exit(json_encode($return));
}

/**
 * 操作成功
 * ！！如果页面请求的参数里含有 cross_cb，则认为是需要做跨域ajax的支持，跳转到 cross_cb 参数里指定的url
 * @param string $msg 成功描述
 */
function ajax_success_exit($msg) {
	$return = array(
			'ok'	=> true,
			'msg'	=> $msg,
	);

	# 支持跨域的AJAX GET
	$jsonp_cb = isset($_GET['jsonp_cb']) ? $_GET['jsonp_cb'] : '';
	if ($jsonp_cb) {
		$jsonp_cb = htmlspecialchars($jsonp_cb);
		echo_exit("{$jsonp_cb}(".json_encode($return).")");
	}

	echo_exit(json_encode($return));
}

function echo_exit($msg) {
	echo $msg;
	exit;
}
/**
 * 得到域名
 */
function getDomain(){
    $domain = $_SERVER['HTTP_HOST'];
    $arr = explode('.', $domain);
    return strtolower(trim($arr[0]));
}
/**
 * 检查是否有权限
 * @param $auth 当前权限
 * @param $group_auth用户组权限
 */
function check_auth($auth, $group_auth){
    return stripos($group_auth, $auth)===false ? false : true;
}

/**
 * 定义所有导入时候的fatal error 错误捕获，用于导入时代码执行错误提示
 * @param ty单独action定义fatalpe $msg
 */
function customError($msg = '') {
	$msg = $msg ? $msg : '模板解析失败，请下载网点导入模板，仔细对照之后再上传\r\n出现此问题的原因：\r\n1.可能导入的模板中存在多个sheet（为了提升解析的速度，模板默认只解析第一个sheet的内容）；\r\n2.可能因为excel的重复操作，导致excel文档格式出现混乱，建议新建excel文档，将内容复制进去，再次进行导入！';
	echo '<script>alert("'.$msg.'");history.go(-1);</script>';
	exit;
}
function check_url($url){
    if (stripos($url, 'oss-cn-beijing.aliyuncs.com')!== false) {
        return true;
    } else {
        return false;
    }
}

function is_number($var)
{
    if ($var == (string) (float) $var) {
        return (bool) is_numeric($var);
    }
    if ($var >= 0 && is_string($var) && !is_float($var)) {
        return (bool) ctype_digit($var);
    }
    return (bool) is_numeric($var);
}
function cut_number($number){
    if (is_float($number)) {
        return number_format($number, 2);
    }
    return $number;

}